/*
 * @Author: 轻语
 * @Date: 2021-12-29 19:37:23
 * @LastEditors: 轻语
 * @LastEditTime: 2021-12-29 19:40:30
 * @Description: 
 */
export function isObject (obj) {
  return Object.prototype.toString.call(obj) === '[object Object]'
}
export function isArray (arr) {
  return Array.isArray(arr)
}
export function merge (target, ...arg) {
  return arg.reduce((acc, cur) => {
    return Object.keys(cur).reduce((subAcc, key) => {
      const srcVal = cur[key]
      if (isObject(srcVal)) {
        subAcc[key] = merge(subAcc[key] ? subAcc[key] : {}, srcVal)
      } else if (isArray(srcVal)) {
        subAcc[key] = srcVal.map((item, idx) => {
          if (isObject(item)) {
            const curAccVal = subAcc[key] ? subAcc[key] : []
            return merge(curAccVal[idx] ? curAccVal[idx] : {}, item)
          } else {
            return item
          }
        })
      } else {
        subAcc[key] = srcVal
      }
      return subAcc
    }, acc)
  }, target)
}